package java_thinking.unit_10._10_10;

/**
 * @Description : 验证内部类是否能被覆盖
 * 这个例子说明，当继承了某个外围类的时候，内部类并没有发生什么特别的变化，这两个内部类是完全独立的两个实体，
 * 各自在自己的命名空间内，当然，明确的继承某个内部类也是可以的，见Egg2
 * 结论：即使继承了某个外围类的时候，内部类还是会执行构造器初始化，就像BigEgg继承了Egg并且重写了Yolk，但是在创建
 * BigEgg时候仍然会先执行Egg.Yolk的原始默认构造器，也就是两个Yolk是完全独立的，从没有写Override即可看出
 * @author: cww
 * @DateTime: 2019-03-16 15:43
 */

public class Egg {
    private Yolk yolk;
    protected class Yolk {
        public Yolk(){
            System.out.println("Egg.Yolk()");
        }
    }
    public Egg() {
        System.out.println("New Egg()");
        yolk = new Yolk();
    }
}

class BigEgg extends Egg {
    public class Yolk {
        public Yolk(){
            System.out.println("BigEgg.Yolk()");
        }
    }

    public static void main(String[] args) {
        new BigEgg();
    }
}
